Che cos'รจ la continuous integration?

Sviluppa l'agilitร  del tuo team con feedback piรน rapidi. Non dimenticare che l'avanzamento va di pari passo con i test.

La continuous integration (CI) รจ una pratica di automatizzazione dell'integrazione delle modifiche al codice apportate da piรน collaboratori all'interno di un progetto software. รˆ una best practice principale di DevOps, che consente agli sviluppatori di unire frequentemente le modifiche al codice in un repository centrale dove poi vengono eseguiti le build e i test. Gli strumenti automatizzati vengono utilizzati per affermare la correttezza del nuovo codice prima dell'integrazione.

Un sistema di controllo delle versioni del codice sorgente รจ il punto cruciale del processo di CI. Il sistema di controllo delle versioni รจ inoltre integrato da altri controlli come test automatizzati della qualitร  del codice, strumenti di revisione dello stile della sintassi e molto altro. ย 

Come ottenere la continuous integration

Scopri come adottare la continuous integration e i test automatizzati in 5 passaggi.ย Leggi l'articolo

Cinque consigli per repository Git compatibili con la CI

Cinque consigli per sfruttare al meglio Git e il tuo strumento di continuous integration! Leggi l'articolo

Strumenti di continuous integration

Cinque consigli per sfruttare al meglio Git e il tuo strumento di continuous integration! Leggi l'articolo

Sviluppo basato su trunk

Lo sviluppo basato su trunk รจ una pratica di gestione del controllo delle versioni per cui gli sviluppatori uniscono aggiornamenti piccoli e frequenti in un "trunk" o branch principale.Leggi l'articolo

L'importanza della continuous integration

Per comprendere l'importanza della CI, รจ utile parlare di alcuni problemi che spesso si verificano in mancanza della CI. Senza CI, gli sviluppatori devono coordinare e comunicare manualmente quando stanno contribuendo con il codice al prodotto finale. Questo coordinamento va oltre i team di sviluppo, fino alle operazioni e al resto dell'organizzazione. I team di prodotto coordinano il momento del lancio in sequenza di funzioni e correzioni e stabiliscono quali membri del team saranno responsabili.ย 

Il sovraccarico di comunicazione di un ambiente senza CI puรฒ comportare processi di sincronizzazione complessi e complicati, con conseguenti costi burocratici non necessari ai progetti. Ciรฒ causa rilasci di codice piรน lenti con tassi di errore piรน elevati, in quanto richiede che gli sviluppatori siano sensibili e attenti alle integrazioni. Questi rischi crescono in modo esponenziale all'aumentare delle dimensioni del team di progettazione e della codebase.

Senza una solida pipeline di CI, puรฒ verificarsi una disconnessione tra il team di progettazione e il resto dell'organizzazione. La comunicazione tra prodotto e progettazione puรฒ essere complicata. La progettazione diventa una scatola nera in cui il resto del team inserisce requisiti e funzionalitร  e forse ottiene i risultati attesi. Sarร  piรน difficile per i tecnici stimare i tempi di distribuzione delle richieste perchรฉ il tempo necessario per l'integrazione delle nuove modifiche diventa un rischio sconosciuto.

Cosa fa la CI

La CI consente di aumentare il numero di dipendenti e l'output di consegna dei team di progettazione. L'introduzione della CI nello scenario di cui sopra consente agli sviluppatori di software di lavorare in modo indipendente sulle funzionalitร  in parallelo. Quando sono pronti a eseguire il merge di queste funzionalitร  nel prodotto finale, possono farlo in modo indipendente e rapido. La CI รจ una pratica preziosa e consolidata nelle moderne organizzazioni di ingegneria del software ad alte prestazioni.

Modalitร  di utilizzo della CI

La CI viene generalmente utilizzata insieme a un flusso di lavoro agile per lo sviluppo del software. Un'organizzazione compilerร  un elenco di attivitร  che comprendono una tabella di marcia del prodotto. Queste attivitร  verranno poi distribuite tra i membri del team di progettazione del software per la distribuzione. L'uso della CI consente la distribuzione di queste attivitร  di sviluppo software in modo indipendente e in parallelo tra gli sviluppatori assegnati. Una volta completata una di queste attivitร , uno sviluppatore introdurrร  il nuovo lavoro nel sistema di CI per integrarlo con il resto del progetto.

CI, continuous deployment e continuous delivery

Continuous integration, deployment e delivery sono tre fasi di una pipeline di rilascio software automatizzata, tra cui una pipeline DevOps. Queste tre fasi consentono di passare dall'idea alla consegna del software all'utente finale. La fase di integrazione รจ ilย primo passo del processo. La continuous integration copre il processo in cui piรน sviluppatori tentano di unire le modifiche al codice con il repository del codiceย principale di un progetto.

La continuous delivery segue la continuous integration. La fase di consegna prevede il packaging di un artefatto per la distribuzione agli utenti finali. Questa fase utilizza strumenti di compilazione automatizzata per generare questo artefatto. In questa fase di compilazione, l'artefatto viene mantenuto "verde", ovvero pronto per essere distribuito agli utenti in qualsiasi momento.

La continuous deployment รจ la fase finale della pipeline. La fase di distribuzione รจ responsabile dell'avvio e della distribuzione automatici dell'artefatto software agli utenti finali. Al momento della distribuzione, l'artefatto ha superato con successo le fasi di integrazione e consegna. Ora รจ il momento di distribuire automaticamente l'artefatto. Ciรฒ avverrร  tramite script o strumenti che spostano automaticamente l'artefatto su server pubblici o su un altro meccanismo di distribuzione, come un app store.

Vantaggi e sfide della continuous integration

La continuous integrationย รจ un aspetto essenziale di DevOps e dei team software ad alte prestazioni. Tuttavia, i vantaggi della CI non si limitano al team di progettazione, ma apportano grandi benefici all'intera organizzazione. La CI consente una migliore trasparenza e comprensione del processo di sviluppo e consegna del software. Questi vantaggi consentono al resto dell'organizzazione di pianificare ed eseguire meglio le strategie di go-to-market. Di seguito sono riportati alcuni dei vantaggi organizzativi complessivi della CI.

Abilitare il ridimensionamento

La CI favorisce la scalabilitร  delle organizzazioni in termini di dimensioni del team di progettazione, dimensione della codebase e infrastruttura. Riducendo al minimo l'integrazione del codice, la burocrazia e il sovraccarico di comunicazione, la CI aiuta a creare flussi di lavoro DevOps e agili. Consente a ogni membro del team di possedere una nuova modifica del codiceย fino al rilascio. La CI favorisce la scalabilitร  rimuovendo qualsiasi dipendenza organizzativa tra lo sviluppo di singole funzionalitร . Gli sviluppatori possono ora lavorare sulle funzionalitร  in un silo isolato e avere la garanzia che il loro codice si integrerร  perfettamente con il resto della codebase, che รจ un processo DevOps fondamentale.ย 

Migliorare il ciclo di feedback

Un feedback piรน rapido sulle decisioni aziendali รจ un altro potente effetto collaterale della CI. I team di prodotto possono testare le idee e iterare la progettazione dei prodotti piรน velocemente con una piattaforma di CI ottimizzata. รˆ possibile apportare rapidamente le modifiche e misurare il loro successo. I bug o altri problemi possono essere risolti e riparati rapidamente.

Migliorare la comunicazione

La CI miglioraย la comunicazione e la responsabilitร  di progettazione complessive, favorendo una maggiore collaborazione tra sviluppoย e operazioni in un team DevOps. Introducendo flussi di lavoro di pull request legati alla CI, gli sviluppatori ottengono una condivisione passiva delle conoscenze. Le pull request consentono agli sviluppatori di osservare e commentare il codice degli altri membri del team. Gli sviluppatori possono ora visualizzare e collaborare sui branch di funzioni con altri sviluppatori a mano a mano che le funzionalitร  progrediscono attraverso la pipeline di CI. La CI puรฒ essere utilizzata anche per ridurre le spese correlate al controllo di qualitร . Una pipeline di CI efficiente con una copertura automatizzata dei test ad alta affidabilitร  proteggerร  dalle regressioni e garantirร  che le nuove funzionalitร  corrispondano a una specifica. Prima di eseguire il merge del nuovo codice, dovrร  superare la suite di asserzioni di test della CI, che impedirร  qualsiasi nuova regressione.

I vantaggi della CI superano di gran lunga qualsiasi sfida correlata alla sua adozione. Detto questo, รจ importante essere consapevoli delle sfide della CI. Le vere sfide della CI sono correlate alla transizione di un progetto non CI a CI. La maggior parte dei progetti software moderni adotterร  la CI fin dalle prime fasi di ideazione e attenuerร  le sfide della successiva adozione.

Adozione e installazione

Le sfide della continuous integration riguardano principalmente l'adozione da parte del team e l'installazione tecnica iniziale. Se un team non dispone attualmente di una soluzione di CI, la scelta della soluzione e il suo avvio possono richiedere qualche sforzo iniziale. Pertanto, รจ necessario considerare attentamente l'infrastruttura di progettazione esistente quando si installa una pipeline di CI.

Curva di apprendimento tecnologico

La funzionalitร  di CI include un elenco di tecnologie di supporto che potrebbero rappresentare investimenti nell'ambito della curva di apprendimento del team. Queste tecnologie sono sistemi di controllo delle versioni, infrastruttura di hosting e tecnologie di orchestrazione.

Best practice di CI

Sviluppo basato su test

Non appena un progetto ha stabilito una pipeline di CI con code coverage del test automatica, รจ buona prassi sviluppare e migliorare costantemente la code coverage del test. Ogni nuova funzionalitร  in arrivo nella pipeline di CI dovrebbe avere una serie di test di accompagnamento per verificare che il nuovo codice si comporti come previsto.

Per Test Driven Development (TDD) si intende la pratica di scrivere il codice di test e i test case prima di eseguire qualsiasi vera codifica delle funzionalitร . Un TDD puro puรฒ coinvolgere da vicino il team di prodotto per contribuire a creare una specifica di comportamento aziendale previsto, che puรฒ quindi essere trasformata in test case. In uno scenario di TDD puro, gli sviluppatori e il team di prodotto si incontreranno e discuteranno di una specifica o un elenco di requisiti. Questo elenco di requisiti verrร  quindi convertito in una checklist di asserzioni di codice. Gli sviluppatori scriveranno quindi il codice che corrisponde a queste asserzioni.

Pull request e revisione del codice

La maggior parte dei team di sviluppo software moderni implementa un flusso di lavoro di pull request e revisione del codice. Le pull request sono una pratica fondamentale per la CI. Una pull request viene creata quando uno sviluppatore รจ pronto a eseguire il merge di un nuovo codice nella codebase principale. La pull request invia una notifica agli altri sviluppatori in merito alla nuova serie di modifiche pronte per l'integrazione.

Le pull request sono il momento opportuno per avviare la pipeline di CI ed eseguire il set di fasi di approvazione automatiche. Inoltre, solitamente viene aggiunta un'ulteriore fase di approvazione manuale al momento della richiesta pull, durante la quale un ingegnere non stakeholder esegue una revisione del codice della funzionalitร . Questo consentirร  un'ulteriore revisione esperta del nuovo codice e della nuova funzionalitร . L'ingegnere non stakeholder fornirร  suggerimenti di modifica e approverร  o rifiuterร  la pull request.

Le pull request e la revisione del codice sono strumenti efficaci per promuovere la comunicazione passiva e la condivisione delle conoscenze in un team di progettazione. Questo aiuta a tutelarsi dal debito tecnico sotto forma di silos di conoscenze, in cui ingegneri specifici rappresentano gli unici stakeholder per determinate funzioni di una base di codice.

Ottimizzare la velocitร  della pipeline

Dato che la pipeline di CI sarร  un processo centrale e utilizzato di frequente, รจ importante ottimizzarne la velocitร  di esecuzione. Qualsiasi piccolo ritardo nel flusso di lavoro della CI aumenterร  in modo esponenziale con l'aumentare della velocitร  di rilascio delle funzionalitร , delle dimensioni del team e della dimensione della codebase. รˆ una buona pratica misurare la velocitร  della pipeline di CI e ottimizzarla secondo necessitร .

Una pipeline di CI piรน veloce consente un ciclo di feedback sui prodotti piรน rapido. Gli sviluppatori possono implementare rapidamente modifiche e sperimentare nuove idee per le funzionalitร  per migliorare l'esperienza utente. I bug possono essere corretti e risolti rapidamente non appena individuati. Questa maggiore velocitร  di esecuzione puรฒ offrire sia un vantaggio rispetto ad altri concorrenti sia un'esperienza complessiva di qualitร  superiore ai tuoi clienti.

Guida introduttiva alla continuous integration

La dipendenza fondamentale della CI รจ un sistema di controllo delle versioni (VCS, Versione Control System). Se la codebase di destinazione di un'installazione di CI non dispone di un VCS, per prima cosa sarร  necessario installarlo. L'assenza di un VCS dovrebbe essere molto improbabile nelle codebase moderne. Alcuni VCS popolari sono Git, Mercurial e Subversion.

Una volta impostato il controllo delle versioni, sarร  necessario trovare una piattaforma di hosting per il controllo delle versioni. La maggior parte dei moderni strumenti di hosting per il controllo delle versioni dispone di supporto e funzionalitร  integrate per la CI. Alcune piattaforme di hosting per il controllo delle versioni piรน diffuse sono Bitbucket, Github e Gitlab.

Dopo aver configurato il controllo delle versioni sul progetto, sarร  necessario aggiungere i passaggi di approvazione dell'integrazione. La fase di approvazione dell'integrazione piรน importante da implementare รจ costituita dai test automatizzati. L'aggiunta di test automatizzati a un progetto puรฒ avere un costo generale iniziale. รˆ necessario installare un framework di test, quindi gli sviluppatori dovranno scrivere codice di test e test case.

Alcune idee per altri meccanismi di approvazione di CI meno costosi da aggiungere sono correttori della sintassi, formattatori di stili di codice o scansioni delle vulnerabilitร  delle dipendenze. Una volta impostato un sistema di controllo delle versioni con alcuni passaggi di approvazione del merge, avrai implementato la continuous integration!

La CI non รจ un processo aziendale puramente correlato alla progettazione. Anche il resto dei team dell'organizzazione, dal marketing, alle vendite, fino ai team di prodotto, trarranno vantaggio da una pipeline di CI. I team di prodotto dovranno pensare a come abbinare in parallelo l'esecuzione di flussi di sviluppo simultanei. I team di prodotto e progettazione lavoreranno a stretto contatto per determinare le aspettative delle funzionalitร  aziendali idonee che costituiranno la suite di test automatizzati.

I team di marketing e vendite potranno fare riferimento alla pipeline di CI per coordinarsi con le iniziative e gli eventi di comunicazione rivolti ai clienti. La CI offre un livello di trasparenza al resto dell'organizzazione sull'avanzamento delle fasi di progettazione. Questa utilitร  per la trasparenza e la comunicazione si integra perfettamente con un flusso di lavoro agile per lo sviluppo di progetti.

In conclusione...

Se la tua organizzazione si impegna per sfruttare i vantaggi di un approccio DevOps o ha semplicemente un team software con piรน sviluppatori, la CI svolge un ruolo molto importante. Aiuterร  la tua organizzazione di progettazione a funzionare in modo piรน rapido ed efficace.ย 

La CI รจ uno standard delle moderne organizzazioni di sviluppo software ad alta efficienza. Le migliori aziende vantano solide pipeline di CI e non ci pensano due volte a ulteriori investimenti in efficienza. I vantaggi della CI non si limitano al team di progettazione e si applicano a tutta l'organizzazione.

Esistono molti strumenti di terze parti per facilitare la gestione e l'installazione della CI. Alcune opzioni popolari sono Codeship, Bitbucket Pipelines, SemaphoreCI, CircleCi, Jenkins, Bamboo, Teamcity e molte altre. Questi strumenti dispongono di guide di configurazione e documentazione approfondite per aiutarti a iniziare.

Prova alcuni dei migliori strumenti di CI forniti da Atlassian:

Bitbucket Pipelinesย รจ un'ottima soluzione per mantenere i progetti aggiornati con le moderne funzionalitร  di CI.

Jira รจ uno degli strumenti di gestione dei progetti Agile e DevOps piรน diffusi al mondo. Si integra perfettamente con altri progetti Bitbucket e, se abbinato a una pipeline di CI, puรฒ fornire una visione molto trasparente dello stato esecutivo di un'organizzazione.

Consigliata per te

Community DevOps

Leggi il blog

Inizia gratis